/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.senac.maisconhecimento.dao;

import br.senac.maisconhecimento.entidade.Categoria;
import br.senac.maisconhecimento.entidade.Usuario;
import java.util.List;
import javax.persistence.Query;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.hibernate.engine.spi.TypedValue;

/**
 *
 * @author Marcus Lemos
 */
public class UsuarioDAO extends GenericDao {
    private Session session = HibernateUtil.getSessionFactory().openSession();

    @SuppressWarnings("unchecked")
    public List<Usuario> listar() {
        List<Usuario> lista = null;
        try {
            String sql = "Select u from Usuario as u";

            session.getTransaction().begin();
            org.hibernate.Query query = session.createQuery(sql);
            lista = (List<Usuario>) query.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
        }
        
        return lista;
    }

    public Usuario consultar(Integer codigo) {
        Usuario entidade = new Usuario();
        try {
            String sql = "Select u from Usuario as u where u.id = ?";
            
            session.beginTransaction();
            entidade = (Usuario) session.load(Usuario.class, codigo);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();            
        }
        
        return entidade;
    }
    
    public Usuario consultarPeloCodigo(int codigo) {
        Usuario entidade = new Usuario();
        try {
            session.beginTransaction();
            
           entidade = (Usuario) session.createCriteria(Usuario.class)
                .add(Restrictions.like("id", codigo))
                    .uniqueResult();
           
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();            
        }
        
        return entidade;
    }
    
    public Usuario consultarPeloLogin(String login) {
        Usuario entidade = new Usuario();
        try {
            session.beginTransaction();
            
           entidade = (Usuario) session.createCriteria(Usuario.class)
                .add(Restrictions.like("login", login))
                    .uniqueResult();
           
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();            
        }
        
        return entidade;
    }
}
